/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tv.inventario.vista;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Transient;
import tv.facturacion.vista.PedidoProducto;
import tv.inventario.modelo.Producto;

/**
 *
 * @author ctrosch
 */
@Entity
@Table(name = "ITEM_CATALOGO",schema = "dbo")
public class ItemCatalogo implements Serializable {
   
    @Id
    @Column(name = "ID", nullable = false, length = 80)
    private String id;    
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)    
    @Column(name = "NROCTA", nullable = false, length = 13)
    private String nrocta;
    @Basic(optional = false)
    @Column(name = "CODLIS", nullable = false, length = 10)
    private String codlis;
    @Basic(optional = false)
    @Column(name = "TIPPRO", nullable = false, length = 6)
    private String tippro;
    @Basic(optional = false)
    @Column(name = "ARTCOD", nullable = false, length = 30)
    private String artcod;
        
    @Column(name = "CLAVE", nullable = false, length = 30)
    private String clave;

    @Column(name = "PRECIO_LISTA", precision = 20, scale = 6)
    private BigDecimal precioLista;
    @Basic(optional = false)
    @Column(name = "MONEDA", nullable = false, length = 6)
    private String moneda;
    @Basic(optional = false)
    @Column(name = "BONIFICACION", nullable = false, precision = 2, scale = 7)
    private BigDecimal bonificacion;
    @Column(name = "IVA", nullable = false, precision = 2, scale = 7)
    private BigDecimal iva;

    @Basic(optional = false)
    @Column(name = "PROXIMO_INGRESO", nullable = false, length = 1)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date proximoIngreso;
    @Basic(optional = false)
    @Column(name = "DESCRP", nullable = false, length = 120)
    private String descrp;

    @Column(name = "PESO", precision = 2, scale = 7)
    private BigDecimal peso;

    @Column(name = "STKMIN", precision = 2, scale = 7)
    private BigDecimal stockMinimo;

    @Basic(optional = false)
    @Column(name = "UNIMED", nullable = false, length = 6)
    private String unidadMedida;
    
    @Basic(optional = false)
    @Column(name = "FACCON", nullable = false, length = 6)
    private int factorConversion;

    @Basic(optional = false)
    @Column(name = "UNICON", nullable = false, length = 6)
    private String unidadConversion;

    @Column(name = "RUBR01", length = 30)
    private String rubro1;    
    @Column(name = "RUBR02", length = 60)
    private String rubro2;
    @Column(name = "PNUEVO")
    private Character pnuevo;
    @Column(name = "IMGCHI", length = 40)
    private String imgchi;
    @Column(name = "IMGGRA", length = 40)
    private String imggra;

    @Column(name = "IMPORT")
    private Character importado;

    @Column(name = "SUBTIPO", length = 30)
    private String subtipo;
    @Column(name = "MARCA", length = 60)
    private String marca;
    @Column(name = "TIPO_PRODUCTO", length = 60)
    private String tipoProducto;
    @Column(name = "INDCOD", length = 20)
    private String indcod;
    @Column(name = "DISINT", length =1)
    private String diponibleEnInternet;
    @Column(name = "PRDPED", length =1)
    private String productoApedido;

    @Column(name = "CONPEN", length =1)
    private String tienePendiente;
    
    @Column(name = "ARCHFT", length =20)
    private String archivoFichaTecnica;

    @Column(name = "NOA", precision = 2, scale = 7)
    private BigDecimal noa;
    @Column(name = "NEA", precision = 2, scale = 7)
    private BigDecimal nea;
    @Column(name = "BUE", precision = 2, scale = 7)
    private BigDecimal bue;
    @Column(name = "CUY", precision = 2, scale = 7)
    private BigDecimal cuy;
    

    @Transient
    private List<ItemStock> stock;

    @Transient
    private BigDecimal cantidadPedir;

    @Transient
    private boolean seleccionado;

    @Transient
    private Producto producto;

    @Transient
    private BigDecimal precioFinal;

    @Transient
    private BigDecimal precioBonificado;

    @Transient
    private String codigo;

    @Transient
    private BigDecimal stockTotal;

    @Transient
    private List<PedidoProducto> pedidosPendiente;

    
    public ItemCatalogo() {

        tippro = "";
        artcod = "";

    }

    public String getArtcod() {
        return artcod.trim();
    }

    public void setArtcod(String artcod) {
        this.artcod = artcod;
    }

    public BigDecimal getBonificacion() {
        if(bonificacion==null){
            bonificacion = BigDecimal.ZERO;
        }
        return bonificacion;
    }

    public void setBonificacion(BigDecimal bonificacion) {

        this.bonificacion = bonificacion;
    }


    public String getCodlis() {
        return codlis;
    }

    public void setCodlis(String codlis) {
        this.codlis = codlis;
    }

    public String getDescrp() {
        return descrp;
    }

    public void setDescrp(String descrp) {
        this.descrp = descrp;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getImgchi() {
        return imgchi;
    }

    public void setImgchi(String imgchi) {
        this.imgchi = imgchi;
    }

    public String getImggra() {
        return imggra;
    }

    public void setImggra(String imggra) {
        this.imggra = imggra;
    }

    public Character getImportado() {
        return importado;
    }

    public void setImportado(Character importado) {
        this.importado = importado;
    }
    
    public String getMoneda() {
        return moneda;
    }

    public void setMoneda(String moneda) {
        this.moneda = moneda;
    }

    public String getNrocta() {
        return nrocta;
    }

    public void setNrocta(String nrocta) {
        this.nrocta = nrocta;
    }

    public BigDecimal getPeso() {
        return peso;
    }

    public void setPeso(BigDecimal peso) {
        this.peso = peso;
    }

    public Character getPnuevo() {
        return pnuevo;
    }

    public void setPnuevo(Character pnuevo) {
        this.pnuevo = pnuevo;
    }

    public BigDecimal getPrecioFinal() {

        try {
            if (precioFinal == null) {             
                precioFinal = precioLista.add(precioLista.multiply(bonificacion).divide(new BigDecimal(100)));

                //Calculamos el iva
                precioFinal = precioFinal.add(precioFinal.multiply(iva).divide(new BigDecimal(100)));
            }
        } catch (Exception e) {            
            precioFinal = BigDecimal.ZERO;
        }
        return precioFinal;
    }

    public void setPrecioFinal(BigDecimal precioFinal) {
        this.precioFinal = precioFinal;
    }

    public BigDecimal getPrecioBonificado() {

        try {
            if (precioBonificado == null) {
                //Calculamos la bonificacion
                precioBonificado = precioLista.add(precioLista.multiply(bonificacion).divide(new BigDecimal(100)));
            }
        } catch (Exception e) {
            precioBonificado = BigDecimal.ZERO;
        }

        return precioBonificado;
    }

    public void setPrecioBonificado(BigDecimal precioFinalSinIva) {
        this.precioBonificado = precioFinalSinIva;
    }

    public BigDecimal getPrecioLista() {
        return precioLista;
    }

    public void setPrecioLista(BigDecimal precioLista) {
        this.precioLista = precioLista;
    }



    public Date getProximoIngreso() {
        return proximoIngreso;
    }

    public void setProximoIngreso(Date proximoIngreso) {
        this.proximoIngreso = proximoIngreso;
    }
    
    public String getRubro1() {
        return rubro1;
    }

    public void setRubro1(String rubro1) {
        this.rubro1 = rubro1;
    }

    public String getRubro2() {
        return rubro2;
    }

    public void setRubro2(String rubro2) {
        this.rubro2 = rubro2;
    }


    public String getTippro() {
        return tippro.trim();
    }

    public void setTippro(String tippro) {
        this.tippro = tippro;
    }

    public String getUnidadMedida() {
        return unidadMedida;
    }

    public void setUnidadMedida(String unidadMedida) {
        this.unidadMedida = unidadMedida;
    }

    public BigDecimal getStockMinimo() {
        return stockMinimo;
    }

    public void setStockMinimo(BigDecimal stockMinimo) {
        this.stockMinimo = stockMinimo;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getSubtipo() {
        return subtipo;
    }

    public void setSubtipo(String subtipo) {
        this.subtipo = subtipo;
    }

    public String getTipoProducto() {
        return tipoProducto;
    }

    public void setTipoProducto(String tipoProducto) {
        this.tipoProducto = tipoProducto;
    }

    public BigDecimal getIva() {
        return iva;
    }

    public void setIva(BigDecimal iva) {
        this.iva = iva;
    }

    public int getFactorConversion() {
        return factorConversion;
    }

    public void setFactorConversion(int factorConversion) {
        this.factorConversion = factorConversion;
    }
   

    public String getUnidadConversion() {
        return unidadConversion;
    }

    public void setUnidadConversion(String unidadConversion) {
        this.unidadConversion = unidadConversion;
    }

    public String getIndcod() {
        return indcod;
    }

    public void setIndcod(String indcod) {
        this.indcod = indcod;
    }

    public String getCodigo() {

        return tippro.trim()+artcod.trim();
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDiponibleEnInternet() {
        return diponibleEnInternet;
    }

    public void setDiponibleEnInternet(String diponibleEnInternet) {
        this.diponibleEnInternet = diponibleEnInternet;
    }

    public String getProductoApedido() {
        return productoApedido;
    }

    public void setProductoApedido(String productoApedido) {
        this.productoApedido = productoApedido;
    }

    public Producto getProducto() {
        return producto;
    }

    public void setProducto(Producto producto) {
        this.producto = producto;
    }


    public boolean isSeleccionado() {
        return seleccionado;
    }

    public void setSeleccionado(boolean seleccionado) {
        this.seleccionado = seleccionado;
    }


    public BigDecimal getCantidadPedir() {
        return cantidadPedir;
    }

    public void setCantidadPedir(BigDecimal cantidadPedir) {
        this.cantidadPedir = cantidadPedir;
    }

    public List<PedidoProducto> getPedidosPendiente() {
        return pedidosPendiente;
    }

    public void setPedidosPendiente(List<PedidoProducto> pedidosPendiente) {
        this.pedidosPendiente = pedidosPendiente;
    }
    
    public List<ItemStock> getStock() {

        if(stock==null){
            stock = new ArrayList<ItemStock>();
            if(stock!=null){
                stock.add(new ItemStock("NOA", noa));
                stock.add(new ItemStock("NEA", nea));
                stock.add(new ItemStock("BUE", bue));
                stock.add(new ItemStock("CUY", cuy));
            }else{
                stock.add(new ItemStock("NOA", BigDecimal.ZERO));
                stock.add(new ItemStock("NEA", BigDecimal.ZERO));
                stock.add(new ItemStock("BUE", BigDecimal.ZERO));
                stock.add(new ItemStock("CUY", BigDecimal.ZERO));
            }
        }
        return stock;
    }

    public void setStock(List<ItemStock> stock) {
        this.stock = stock;
    }

    

    
    public BigDecimal getBue() {
        return bue;
    }

    public void setBue(BigDecimal bue) {
        this.bue = bue;
    }

    public BigDecimal getCuy() {
        return cuy;
    }

    public void setCuy(BigDecimal cuy) {
        this.cuy = cuy;
    }

    public BigDecimal getNea() {
        return nea;
    }

    public void setNea(BigDecimal nea) {
        this.nea = nea;
    }

    public BigDecimal getNoa() {
        return noa;
    }

    public void setNoa(BigDecimal noa) {
        this.noa = noa;
    }

    public BigDecimal getStockTotal() {

        try {
            stockTotal = BigDecimal.ZERO;
            stockTotal = stockTotal.add(noa.add(nea.add(bue.add(cuy))));
        } catch (Exception e) {
            stockTotal = BigDecimal.ZERO;
        }
        return stockTotal;
    }

    public void setStockTotal(BigDecimal stockTotal) {
        this.stockTotal = stockTotal;
    }

    public String getTienePendiente() {
        return tienePendiente;
    }

    public void setTienePendiente(String tienePendiente) {
        this.tienePendiente = tienePendiente;
    }

    public String getArchivoFichaTecnica() {
        return archivoFichaTecnica;
    }

    public void setArchivoFichaTecnica(String archivoFichaTecnica) {
        this.archivoFichaTecnica = archivoFichaTecnica;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ItemCatalogo other = (ItemCatalogo) obj;
        if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
            return false;
        }
        return true;
    }
    
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 73 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "ItemCatalogo{" + "id=" + id + '}';
    }
}
